<?php

/**
 * Controller Payments class
 * 
 * Controller responsável pelo processo de pagamentos.
 * 
 * @package Controllers
 * @category Site
 * @author carlos o carvalho <contato@carlosocarvalho.com.br>
 * @version 1.0.1
 * @license GPL
 */
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class payments extends Public_Controller {

    /** _construct */
    public function __construct() {
        parent::__construct();
        $this->template = 'payment';
        $this->load->library('User_Manager');
        $this->load->model(array('Users_M', 'Habilitacoes_M', 'Lances_M', 'Lances_Pagamentos_M', 'Lances_Arrematados_M'));
    }

    function index() {
        
    }

    function lances($userId, $leilaoId) {

        $this->data['payments'] = $this->lances_model->get_lances_arrematados_by_user_and_leilao($userId, $leilaoId);

        $this->template('payments/description');
    }

    function getOptions() {

        $rs = $this->db->get('account_payments')->result();

        $options = array('' => 'Selecione uma opção');

        foreach ($rs as $key => $row) {

            $options[$row->ID] = $row->DESCRICAO;
        }
        echo form_dropdown('payment_credito', $options, false, 'class="form-control"');
    }

    function process() {
        $this->load->library(array('Lib_Paypal', 'InstantPaymentNotification'));

        $this->paypal = $this->lib_paypal;
        $this->notify = $this->instantpaymentnotification;

        $as_total = 0;




        if ($this->input->post('payment_credito')) {
            $rowL = $this->db->get_where('account_payments', array('ID' => $this->input->post('payment_credito')))->row();
            $lotes_cart = array();
            foreach ($_POST['lotes'] as $k => $row_data) {

                $price = ((($rowL->TAXA * $row_data['valor']) / 100 ) + $row_data['valor']);
                $price = number_format($price, 2, '.', '');

                $as_total += $price * 1;


                $lotes_cart['L_PAYMENTREQUEST_0_NAME' . $k] = $row_data['name'];
                $lotes_cart['L_PAYMENTREQUEST_0_DESC' . $k] = '';
                $lotes_cart['L_PAYMENTREQUEST_0_AMT' . $k] = $price;
                $lotes_cart['L_PAYMENTREQUEST_0_QTY' . $k] = 1;
            }

            $user = $rowL->USUARIO;
            $pwd = $rowL->PWD;
            $signature = $rowL->ASSINATURA;

            $this->session->set_userdata(array(
                'user_payment' => $user,
                'user_pwd' => $pwd,
                'user_signature' => $signature
            ));
            $frete = 0;

            $this->db->trans_start();

            $this->db->insert('lances_pagamentos', array('TIPO' => 'paypal',
                'USER_ID' => $this->session->userdata('id'),
                'VALOR' => $as_total,
                'DATA' => date('Y-m-d H:i:s'),
                'CODES_LANCES' => implode(';', $_POST['codes'])
            ));


            $params = array(
                'RETURNURL' => site_url('payments/finish'),
                'CANCELURL' => site_url('payments/cancel'),
                'PAYMENTREQUEST_0_AMT' => $as_total + $frete,
                'PAYMENTREQUEST_0_CURRENCYCODE' => 'BRL',
                'PAYMENTREQUEST_0_SHIPPINGAMT' => $frete,
                'PAYMENTREQUEST_0_ITEMAMT' => $as_total,
                'PAYMENTREQUEST_0_INVNUM' => str_pad($this->db->insert_id(), 11, 0, STR_PAD_LEFT)
            );

            $params = array_merge($params, $lotes_cart);


            $this->paypal->init(array('user' => $user, 'pwd' => $pwd, 'signature' => $signature));

            $this->db->trans_complete();
            if ($this->db->trans_status() === TRUE) {
                $payment = $this->paypal->request('SetExpressCheckout', $params);
                if ($payment) {
                    $this->paypal->redirect_to();
                } else {

                    var_dump($payment);
                }
            } else {
                redirect('payments/lances');
            }
        } else {


            $blt = $this->db->get_where('boletos_bancarios_config', array('NAME' => $this->input->post('payment_boleto')))->row();


            foreach ($_POST['lotes'] as $k => $row_data) {
                $as_total += $row_data['valor'] * 1;
            }

            if ($blt) {

                $this->load->library('Boleto');
                $this->boleto->set_banco('bradesco');

                $user = $this->db->get_where('clientes', array('COD' => $this->session->userdata('id')))->row();
                $key = implode('', $_POST['codes']);

                $key = substr($key, 0, 10);
                $key = str_pad($key, 11, STR_PAD_LEFT, '0');



                $bltrow = $this->db->get_where('lances_pagamentos', array('NUM_DOC' => $key));




                if ($bltrow->num_rows() == 0) {
                    $this->db->trans_begin();
                    $data = array(
                        'TIPO' => 'boleto',
                        'USER_ID' => $this->session->userdata('id'),
                        'KEY_LOTES' => implode('|', $_POST['codes']),
                        'VALOR' => $as_total,
                        'NUM_DOC' => $key,
                        'DATA_CAD' => date('Y-m-d H:i:s')
                    );

                    $this->db->insert('lances_pagamentos', $data);

                    $num_doc = $this->db->insert_id();

                    if ($this->db->trans_status() === FALSE) {
                        $this->db->trans_rollback();

                        echo 'O boleto não pode ser gerado entre em contato com administrador';
                        return;
                    } else {
                        $this->db->trans_commit();
                    }
                } else {
                    $num_doc = $bltrow->row()->PAGAMENTO_ID;
                }



                $config_boleto = array(
                    'price' => $as_total,
                    'razao_name' => $blt->RAZAO,
                    'agencia' => $blt->AGENCIA,
                    'agencia_digito' => $blt->AGENCIA_DIGITO,
                    'conta' => $blt->CONTA,
                    'conta_digito' => $blt->CONTA_DIGITO,
                    'taxa' => $blt->TAXA,
                    'cpf_cnpj' => $blt->CNPJ,
                    'carteira' => $blt->CARTEIRA,
                    'instrucoes1' => $blt->INSTRUCAO_1,
                    'instrucoes2' => $blt->INSTRUCAO_2,
                    'instrucoes3' => $blt->INSTRUCAO_3,
                    'instrucoes4' => $blt->INSTRUCAO_3,
                    'demonstrativo1' => $blt->DEMONSTRATIVO_1,
                    'demonstrativo2' => $blt->DEMONSTRATIVO_2,
                    'demonstrativo3' => $blt->DEMONSTRATIVO_3,
                    'nosso_numero' => str_pad($num_doc, 11, STR_PAD_LEFT, '0'),
                    'data_documento' => date('d/m/Y'),
                    'name_cliente' => $user->NOME,
                    'cidade_cliente' => $user->CIDADE,
                    'prazo' => (int) $blt->PRAZO,
                    'cep_cliente' => $user->CEP,
                    'uf_cliente' => $user->UF,
                    'logradouro_cliente' => $user->LOGRADOURO . ',' . $user->NUMERO . ' ' . $user->COMPLEMENTO
                );
                // debug_print($config_boleto);
                $this->boleto->initialize($config_boleto);
                $this->boleto->generate();
            } else {

                echo '<div class="alert alert-danger">Nenhum boleto foi configurado para ' . $this->input->post('payment_boleto') . '</div>';

                exit();
            }
        }
    }

    function getTaxaPayment($id = null, $json = true) {
        $data['error'] = true;
        $id = is_null($id) ? $this->input->post('max_payment') : $id;

        if ($id) {
            $row = $this->db->get_where('account_payments', array('ID' => $id))->row();

            if ($row) {
                $data['error'] = false;
                $data['tax'] = $row->TAXA;
            }
        }

        if (!$json) {

            return $data;
        }

        header('content-type:json/text;');
        echo json_encode($data);
    }

    function finish() {

        parse_str($_SERVER['QUERY_STRING'], $_get);
        $user = $this->session->userdata('user_payment');
        $pwd = $this->session->userdata('user_pwd');
        $signature = $this->session->userdata('user_signature');


        $params = array('TOKEN' => $_get['token']);
        $this->paypal->init(array('user' => $user, 'pwd' => $pwd, 'signature' => $signature));
        $paymentDetail = $this->paypal->request('GetExpressCheckoutDetails', $params);


        if ($paymentDetail) {


            $py_ck = $this->paypal->request('DoExpressCheckoutPayment', array(
                'TOKEN' => $_get['token'],
                'PAYERID' => $_get['PayerID'],
                'PAYMENTREQUEST_0_AMT' => $paymentDetail->PAYMENTREQUEST_0_AMT,
                'PAYMENTREQUEST_0_CURRENCYCODE' => 'BRL',
                'PAYMENTREQUEST_0_INVNUM' => $paymentDetail->PAYMENTREQUEST_0_INVNUM
            ));


            if ($py_ck) {

                if ($py_ck->ACK == 'Success' && $py_ck->PAYMENTINFO_0_PAYMENTSTATUS == 'Completed') {
                    $this->session->set_flashdata('message_payment', '<div class="alert alert-success">Pagamento Realizado com sucesso</div>');
                }
            }
            redirect('usuario/historico');
        }
    }

    function cancel() {
        parse_str($_SERVER['QUERY_STRING'], $_get);
        $user = $this->session->userdata('user_payment');
        $pwd = $this->session->userdata('user_pwd');
        $signature = $this->session->userdata('user_signature');

        $params = array('TOKEN' => $_get['token']);
        $this->paypal->init(array('user' => $user, 'pwd' => $pwd, 'signature' => $signature));
        $paymentDetail = $this->paypal->request('GetExpressCheckoutDetails', $params);

        if ($paymentDetail->ACK == 'Success') {
            if ($paymentDetail->CHECKOUTSTATUS === 'PaymentActionNotInitiated') {
                $this->session->set_flashdata('message_payment', '<div class="alert alert-danger">Pagamento Cancelado</div>');

                redirect('payments/lances');
            }
        }
    }

    function notifyPaypal() {
        
    }

    function boletos($authkey, $print = false) {


        $this->load->model(array('Boletos_M', 'Pagamentos_M'));

        $payment = $this->Pagamentos_M->get_by(array('KEY' => $authkey), true);
        $blt = $this->Boletos_M->get();




        if ($blt) {

            $this->load->library('Boleto');
            $this->boleto->set_banco('bradesco');
            $boleto = $blt['0'];
            $key = str_pad($payment->PAGAMENTO_ID, 11, STR_PAD_LEFT, '0');
            $lotes = $this->Lances_Arrematados_M->info_lote(array('lca.LOTE_ID' => $payment->LOTE_ID, 'lca.LEILAO_ID' => $payment->LEILAO_ID));
            $lance = $lotes['0'];
            $sum_taxas = 0;
            $sum_subtotal = 0;
            $sum_comissao = 0;
            foreach ($lotes as $key => $row):
                $taxa = get_taxa($row->TOTAL);
                $sum_taxas+=$taxa;
                $sum_subtotal += $row->TOTAL;
                $sum_comissao+= $row->COMISSAO;

            endforeach;

            if ($lance->PAGAMENTO_ID == 0) {

                $this->Lances_Arrematados_M->save(array('PAGAMENTO_ID' => $payment->PAGAMENTO_ID), $lance->ID);
                $date_boleto = date('Y-m-d', strtotime($payment->CRIADO . ' +' . $boleto->PRAZO . ' day')); //date()$boleto->CRIADO;
                //$boleto->PRAZO; 

                $this->Pagamentos_M->save(array('VENCIMENTO' => $date_boleto), $payment->PAGAMENTO_ID);
            }
            $config_boleto = array(
                'price' => $sum_comissao + $sum_subtotal + $sum_taxas,
                'razao_name' => $boleto->RAZAO,
                'agencia' => $boleto->AGENCIA,
                'agencia_digito' => $boleto->AGENCIA_DIGITO,
                'conta' => $boleto->CONTA,
                'conta_digito' => $boleto->CONTA_DIGITO,
                'taxa' => $boleto->TAXA,
                'cpf_cnpj' => $boleto->CNPJ,
                'carteira' => $boleto->CARTEIRA,
                'instrucoes1' => $boleto->INSTRUCAO_1,
                'instrucoes2' => $boleto->INSTRUCAO_2,
                'instrucoes3' => $boleto->INSTRUCAO_3,
                'instrucoes4' => $boleto->INSTRUCAO_3,
                'demonstrativo1' => $boleto->DEMONSTRATIVO_1,
                'demonstrativo2' => $boleto->DEMONSTRATIVO_2,
                'demonstrativo3' => $boleto->DEMONSTRATIVO_3,
                'nosso_numero' => str_pad($payment->PAGAMENTO_ID, 11, STR_PAD_LEFT, '0'),
                'data_documento' => date('d/m/Y', strtotime($payment->CRIADO)),
                'name_cliente' => $lance->NOME,
                'cidade_cliente' => $lance->CIDADE,
                'prazo' => (int) $boleto->PRAZO,
                'cep_cliente' => $lance->CEP,
                'uf_cliente' => $lance->UF,
                'logradouro_cliente' => $lance->LOGRADOURO . ',' . $lance->NUMERO . ' ' . $lance->COMPLEMENTO,
                'show_print' => $print !== false ? site_url('boleto-' . $authkey . '.html') : false
            );
            // debug_print($config_boleto);
            $this->boleto->initialize($config_boleto);
            $this->boleto->generate();
        } else {

            echo '<div class="alert alert-danger">Nenhum boleto foi configurado para ' . $this->input->post('payment_boleto') . '</div>';

            exit();
        }
    }

    function uploadComprovante($key) {
        $row = $this->Lances_Pagamentos_M->get_by(array('KEY' => $key), true);
        $form = form_open_multipart('save-comprovante-' . $row->PAGAMENTO_ID . '.html');
        $form .= form_upload('uploadFile', '', 'class="button-upload"') . '<br/>';
        $form .= '<div class="css3button" data-trigger=\'[name="uploadFile"]\'>Selecione o Arquivo</div>';
        $form .= '<div class="info-image"></div>';
        $form .= form_submit('', 'Processar', 'class="btn btn-lg btn-primary"');
        $form .= form_close();

        echo $form;
    }

    function saveComprovante($id) {

        //  $s=   $this->Lances_Pagamentos_M->save(array('PAGAMENTO_ENVIADO'=>'S'),$id);
        $this->folder_img = 'comprovantes/';
        $info = $this->save_upload();
        if ($info['error'] == false) {
            $s = $this->Lances_Pagamentos_M->save(array('PAGAMENTO_ENVIADO' => 'S', 'COMPROVANTE' => $info['info']['file_name']), $id);
            if ($s) {
                Utils::FlashMessage(lang_system('upload_success'));
            } else {

                Utils::FlashMessage(lang_system('upload_fail'), 'error danger');
            }
        } else {
            Utils::FlashMessage(lang_system('upload_fail'), 'error danger');
        }

        redirect(BASE_URL_USER . '/historico');
    }

    private function save_upload() {
        $config ['upload_path'] = str_replace('system', '', BASEPATH) . '/public/images/' . $this->folder_img;
        $config ['allowed_types'] = 'gif|jpg|png|JPG|GIF|PNG';
        $config ['max_size'] = 1024 * 5;
        $config ['encrypt_name'] = TRUE;
        //$config['overwrite'] = TRUE;
        $this->load->library('upload', $config);
        $data ['error'] = false;

        if (!$this->upload->do_upload('uploadFile')) {
            $data ['message'] = $this->upload->display_errors();
            $data ['error'] = true;
        }
        $data['info'] = $this->upload->data();
        /*
          else {
          $data ['error'] = false;
          $d = $this->upload->data();

          $data ['files'] ['name'] = $d ['raw_name'] . $d ['file_ext'];
          $data ['files'] ['size'] = $d ['file_size'];

          $config ['image_library'] = 'gd2';
          $config ['source_image'] = str_replace('system/', '', BASEPATH) . '/public/images/' . $this->folder_img . $data ['files'] ['name'];
          $config ['maintain_ratio'] = TRUE;
          $config ['quality'] = 100;
          $config ['width'] = $this->image_width;
          $config ['height'] = $this->image_height;
          $this->load->library('image_lib');
          $imageM = $this->image_lib;
          if ($this->resize) {
          $imageM->initialize($config);
          $imageM->resize();
          $imageM->clear();
          }


          } */

        return $data;
    }

    function boletosDemo() {


        $this->load->model(array('Boletos_M'));

        //$payment = $this->Pagamentos_M->get_by(array('KEY' => $authkey), true);
        $blt = $this->Boletos_M->get();




        if ($blt) {

            $this->load->library('Boleto');
            $this->boleto->set_banco('bradesco');
            $boleto = $blt['0'];

            $config_boleto = array(
                'price' => 10.00,
                'razao_name' => $boleto->RAZAO,
                'agencia' => $boleto->AGENCIA,
                'agencia_digito' => $boleto->AGENCIA_DIGITO,
                'conta' => $boleto->CONTA,
                'conta_digito' => $boleto->CONTA_DIGITO,
                'taxa' => $boleto->TAXA,
                'cpf_cnpj' => $boleto->CNPJ,
                'carteira' => $boleto->CARTEIRA,
                'instrucoes1' => $boleto->INSTRUCAO_1,
                'instrucoes2' => $boleto->INSTRUCAO_2,
                'instrucoes3' => $boleto->INSTRUCAO_3,
                'instrucoes4' => $boleto->INSTRUCAO_3,
                'demonstrativo1' => $boleto->DEMONSTRATIVO_1,
                'demonstrativo2' => $boleto->DEMONSTRATIVO_2,
                'demonstrativo3' => $boleto->DEMONSTRATIVO_3,
                'nosso_numero' => str_pad('028', 11, STR_PAD_LEFT, '0'),
                'data_documento' => date('d/m/Y'),
                'name_cliente' => 'Maxbid Leilões',
                'cidade_cliente' => 'SP',
                'prazo' => (int) $boleto->PRAZO,
                'cep_cliente' => '',
                'uf_cliente' => '',
                'logradouro_cliente' => '',
                'show_print' => false
            );
            // debug_print($config_boleto);
            $this->boleto->initialize($config_boleto);
            $this->boleto->generate();
        } else {

            echo '<div class="alert alert-danger">Nenhum boleto foi configurado para ' . $this->input->post('payment_boleto') . '</div>';

            exit();
        }
    }

    function demo2() {

        
        $this->load->model(array('Boletos_M'));
        
        //$payment = $this->Pagamentos_M->get_by(array('KEY' => $authkey), true);
        $blt = $this->Boletos_M->get(true);




        if ($blt) {


            $boleto = $blt;
         
            /*
              $config_boleto = array(
              'price' => 10.00,
              'razao_name' => $boleto->RAZAO,
              'agencia' => $boleto->AGENCIA,
              'agencia_digito' => $boleto->AGENCIA_DIGITO,
              'conta' => $boleto->CONTA,
              'conta_digito' => $boleto->CONTA_DIGITO,
              'taxa' => $boleto->TAXA,
              'cpf_cnpj' => $boleto->CNPJ,
              'carteira' => $boleto->CARTEIRA,
              'instrucoes1' => $boleto->INSTRUCAO_1,
              'instrucoes2' => $boleto->INSTRUCAO_2,
              'instrucoes3' => $boleto->INSTRUCAO_3,
              'instrucoes4' => $boleto->INSTRUCAO_3,
              'demonstrativo1' => $boleto->DEMONSTRATIVO_1,
              'demonstrativo2' => $boleto->DEMONSTRATIVO_2,
              'demonstrativo3' => $boleto->DEMONSTRATIVO_3,
              'nosso_numero' => str_pad('028', 11, STR_PAD_LEFT, '0'),
              'data_documento' => date('d/m/Y'),
              'name_cliente' => 'Maxbid Leilões',
              'cidade_cliente' => 'SP',
              'prazo' => (int) $boleto->PRAZO,
              'cep_cliente' => '',
              'uf_cliente' => '',
              'logradouro_cliente' => '',
              'show_print' => false
              );
             */
            $config = array(
                'dataVencimento' => new DateTime(date('Y-m-d')),
                'valor' => '10.00',
                'sequencial' => str_pad('28', 11, STR_PAD_LEFT, '0'), // Até 11 dígitos
                'agencia' => $boleto->AGENCIA, // Até 4 dígitos
                'carteira' => $boleto->CARTEIRA, // 3, 6 ou 9
                'conta' => $boleto->CONTA, // Até 7 dígitos
                // Parâmetros recomendáveis
                //'logoPath' => base_url('public/images/logo_banco.jpg'), // Logo da sua empresa
                'contaDv' => $boleto->CONTA_DIGITO,
                'agenciaDv' => $boleto->AGENCIA_DIGITO,
                'descricaoDemonstrativo' => array(// Até 5
                    $boleto->DEMONSTRATIVO_1,
                    $boleto->DEMONSTRATIVO_2,
                    $boleto->DEMONSTRATIVO_3
                ),
                'instrucoes' => array(// Até 8
                    $boleto->INSTRUCAO_1,
                    $boleto->INSTRUCAO_3,
                    $boleto->INSTRUCAO_3
                )
            );
            include_once APPPATH.'libraries/openBoleto/OpenBoletoLib.php';
            
            $objBoleto = new OpenBoletoLib();
            $objBoleto->cedente($boleto->RAZAO, format_cnpj_cpf($boleto->CNPJ), $boleto->LOGRADOURO, '00009-000', $boleto->CIDADE, $boleto->UF);
            $objBoleto->sacado('FABIO DOS SANTOS', format_cnpj_cpf('13126836860'), 'Flórida', '09551000', 'São Caetano do Sul', 'SP');
            $objBoleto->initialize($config);
            echo $objBoleto->generate();
        }
    }

}
